package com.lifeverse.entity.enums;

/**
 * 审计操作类型枚举
 * 定义系统中需要审计的各种操作类型
 */
public enum AuditAction {
    
    // 认证相关操作
    LOGIN("用户登录"),
    LOGOUT("用户登出"),
    LOGIN_FAILED("登录失败"),
    PASSWORD_CHANGE("密码修改"),
    PASSWORD_RESET("密码重置"),
    ACCOUNT_LOCKED("账户锁定"),
    ACCOUNT_UNLOCKED("账户解锁"),
    
    // 用户管理操作
    USER_CREATE("创建用户"),
    USER_UPDATE("更新用户"),
    USER_DELETE("删除用户"),
    USER_ACTIVATE("激活用户"),
    USER_DEACTIVATE("停用用户"),
    USER_ROLE_ASSIGN("分配角色"),
    USER_ROLE_REVOKE("撤销角色"),
    USER_PERMISSION_GRANT("授予权限"),
    USER_PERMISSION_REVOKE("撤销权限"),
    
    // 生命体管理操作
    LIFE_ENTITY_CREATE("创建生命体"),
    LIFE_ENTITY_UPDATE("更新生命体"),
    LIFE_ENTITY_DELETE("删除生命体"),
    LIFE_ENTITY_ACTIVATE("激活生命体"),
    LIFE_ENTITY_DEACTIVATE("停用生命体"),
    LIFE_ENTITY_TYPE_CHANGE("变更生命体类型"),
    
    // 数字DNA操作
    DNA_CREATE("创建数字DNA"),
    DNA_UPDATE("更新数字DNA"),
    DNA_DELETE("删除数字DNA"),
    DNA_MUTATION("DNA变异"),
    DNA_CROSSOVER("DNA交叉"),
    DNA_EXPRESSION("基因表达"),
    
    // 意识状态操作
    CONSCIOUSNESS_CREATE("创建意识状态"),
    CONSCIOUSNESS_UPDATE("更新意识状态"),
    CONSCIOUSNESS_DELETE("删除意识状态"),
    CONSCIOUSNESS_EVOLUTION("意识进化"),
    
    // 关系管理操作
    RELATIONSHIP_CREATE("创建关系"),
    RELATIONSHIP_UPDATE("更新关系"),
    RELATIONSHIP_DELETE("删除关系"),
    RELATIONSHIP_ACTIVATE("激活关系"),
    RELATIONSHIP_DEACTIVATE("停用关系"),
    
    // 决策引擎操作
    DECISION_CREATE("创建决策"),
    DECISION_EXECUTE("执行决策"),
    DECISION_CANCEL("取消决策"),
    DECISION_FEEDBACK("决策反馈"),
    RULE_CREATE("创建规则"),
    RULE_UPDATE("更新规则"),
    RULE_DELETE("删除规则"),
    RULE_ACTIVATE("激活规则"),
    RULE_DEACTIVATE("停用规则"),
    
    // 资源管理操作
    RESOURCE_CREATE("创建资源"),
    RESOURCE_UPDATE("更新资源"),
    RESOURCE_DELETE("删除资源"),
    RESOURCE_ALLOCATE("分配资源"),
    RESOURCE_RELEASE("释放资源"),
    RESOURCE_OPTIMIZE("优化资源"),
    
    // 协作操作
    COLLABORATION_CREATE("创建协作"),
    COLLABORATION_JOIN("加入协作"),
    COLLABORATION_LEAVE("离开协作"),
    COLLABORATION_COMPLETE("完成协作"),
    COLLABORATION_CANCEL("取消协作"),
    
    // 群体智慧操作
    GROUP_CREATE("创建群体"),
    GROUP_JOIN("加入群体"),
    GROUP_LEAVE("离开群体"),
    GROUP_DECISION("群体决策"),
    GROUP_DISSOLVE("解散群体"),
    
    // 网络监控操作
    NETWORK_MONITOR("网络监控"),
    NETWORK_ALERT("网络告警"),
    NETWORK_ANOMALY("网络异常"),
    NETWORK_RECOVERY("网络恢复"),
    
    // 机器学习操作
    ML_MODEL_TRAIN("模型训练"),
    ML_MODEL_PREDICT("模型预测"),
    ML_MODEL_UPDATE("模型更新"),
    ML_MODEL_DEPLOY("模型部署"),
    ML_PATTERN_DETECT("模式检测"),
    ML_ANOMALY_DETECT("异常检测"),
    
    // 系统管理操作
    SYSTEM_CONFIG_UPDATE("系统配置更新"),
    SYSTEM_BACKUP("系统备份"),
    SYSTEM_RESTORE("系统恢复"),
    SYSTEM_MAINTENANCE("系统维护"),
    SYSTEM_SHUTDOWN("系统关闭"),
    SYSTEM_STARTUP("系统启动"),
    
    // 数据操作
    DATA_EXPORT("数据导出"),
    DATA_IMPORT("数据导入"),
    DATA_BACKUP("数据备份"),
    DATA_RESTORE("数据恢复"),
    DATA_PURGE("数据清理"),
    
    // API访问操作
    API_ACCESS("API访问"),
    API_RATE_LIMIT("API限流"),
    API_UNAUTHORIZED("API未授权访问"),
    API_FORBIDDEN("API禁止访问"),
    
    // 安全相关操作
    SECURITY_SCAN("安全扫描"),
    SECURITY_ALERT("安全告警"),
    SECURITY_INCIDENT("安全事件"),
    SECURITY_POLICY_UPDATE("安全策略更新"),
    
    // 其他操作
    FILE_UPLOAD("文件上传"),
    FILE_DOWNLOAD("文件下载"),
    FILE_DELETE("文件删除"),
    REPORT_GENERATE("生成报告"),
    NOTIFICATION_SEND("发送通知"),
    EMAIL_SEND("发送邮件"),
    SMS_SEND("发送短信");
    
    private final String description;
    
    AuditAction(String description) {
        this.description = description;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 判断是否为认证相关操作
     */
    public boolean isAuthenticationAction() {
        return this == LOGIN || this == LOGOUT || this == LOGIN_FAILED || 
               this == PASSWORD_CHANGE || this == PASSWORD_RESET ||
               this == ACCOUNT_LOCKED || this == ACCOUNT_UNLOCKED;
    }
    
    /**
     * 判断是否为用户管理操作
     */
    public boolean isUserManagementAction() {
        return this.name().startsWith("USER_");
    }
    
    /**
     * 判断是否为敏感操作
     */
    public boolean isSensitiveAction() {
        return this == USER_DELETE || this == LIFE_ENTITY_DELETE ||
               this == DNA_DELETE || this == SYSTEM_SHUTDOWN ||
               this == DATA_PURGE || this == SECURITY_INCIDENT ||
               this == PASSWORD_RESET || this == ACCOUNT_LOCKED;
    }
    
    /**
     * 获取操作的风险等级（1-5）
     */
    public int getRiskLevel() {
        if (isSensitiveAction()) {
            return 5;
        }
        if (isUserManagementAction() || this.name().contains("DELETE")) {
            return 4;
        }
        if (this.name().contains("UPDATE") || this.name().contains("CREATE")) {
            return 3;
        }
        if (isAuthenticationAction()) {
            return 2;
        }
        return 1;
    }
}